package balance

import "fmt"

type Balancer interface {
	DoBalance([]*Instance) (*Instance, error)
}

// 封装：里面的字段都是小写，这样外部不可见，就无法查看也无法修改，甚至无法创建
// 在对结构体做什么样的操作，就再写方法来实现
// 这样就可以把这个结构体封装好，只能用提供的方法进行有限的操作
type Instance struct {
	host string
	port int
}

// 结构体里的字段都是小写，外部不可见，外部调用构造函数创建结构体
func NewInstance(host string, port int) *Instance {
	return &Instance{host, port}
}

// 还是因为封装，这里再提供方法可以查询
func (i *Instance) GetHost() string{
	return i.host
}

func (i *Instance) GetPort() int{
	return i.port
}

func (i *Instance) String() string{
	return fmt.Sprintf("%v:%v", i.host, i.port)
}
